import router from "../../router/router.js";

export default {
  namespaced: true,
  state: {
    tabsMenuList: [{
      title: "主页概览",
      url: '/dashboard', // 使用绝对路径更稳妥，与路由配置一致
      icon: "Menu",
      close: false, // 不可关闭
      checked: true
    }]
  },
  mutations: {
    addTabsMenu(state, obj) {
      // 确保新添加的 obj.url 是绝对路径，与路由配置保持一致
      if (!obj.url.startsWith('/')) {
        obj.url = '/' + obj.url;
      }

      let existingTag = state.tabsMenuList.find(item => item.url === obj.url); // 使用 url 而非 title 进行唯一性判断，更准确

      if (existingTag) {
        // 如果标签已存在，则激活它
        state.tabsMenuList.forEach(item => {
          item.checked = false;
        });
        existingTag.checked = true;
      } else {
        // 如果标签不存在，则添加它并激活
        state.tabsMenuList.forEach(item => {
          item.checked = false;
        });
        state.tabsMenuList.push(obj);
      }
    },

    delectTagMenu(state, itemToRemove) {
      const indexToRemove = state.tabsMenuList.findIndex(
        (tab) => tab.url === itemToRemove.url
      ); // 使用 url 进行精确查找

      if (indexToRemove === -1) {
        // 未找到要删除的标签，直接返回
        return;
      }

      // 检查是否试图关闭不可关闭的标签
      if (!state.tabsMenuList[indexToRemove].close) {
        console.warn("尝试关闭一个不可关闭的标签页:", itemToRemove.title);
        return; // 不允许关闭
      }

      // 判断当前激活的标签页是否是要删除的标签页
      const isCurrentActive = itemToRemove.checked;

      // 删除标签页
      state.tabsMenuList.splice(indexToRemove, 1);

      // 如果删除的是当前激活的标签页，需要跳转
      if (isCurrentActive) {
        let newActiveTab = null;

        // 尝试激活被删除标签页的前一个标签页
        if (state.tabsMenuList[indexToRemove - 1]) {
          newActiveTab = state.tabsMenuList[indexToRemove - 1];
        }
        // 如果前一个不存在 (例如，删除的是第一个可关闭的标签)，尝试激活剩余的最后一个标签页
        // 或者简单地回到 dashboard
        else if (state.tabsMenuList.length > 0) {
          // 这里可以更智能，例如找到最近的一个可用的标签
          // 简单处理：如果还剩下一个标签页，激活它；否则退回dashboard
          newActiveTab = state.tabsMenuList[state.tabsMenuList.length - 1];
        }

        // 确保 newActiveTab 存在，并且激活它并跳转
        if (newActiveTab) {
          state.tabsMenuList.forEach(item => {
            item.checked = false;
          });
          newActiveTab.checked = true;
          router.push(newActiveTab.url);
        } else {
          // 如果所有可关闭的标签都删除了，只剩下dashboard
          // 确保dashboard是激活的并且跳转到dashboard
          const dashboardTab = state.tabsMenuList.find(tab => tab.url === '/dashboard');
          if (dashboardTab) {
            state.tabsMenuList.forEach(item => item.checked = false);
            dashboardTab.checked = true;
            router.push('/dashboard');
          } else {
            // 极端情况：如果dashboard也被移除了，确保有默认fallback
            router.push('/'); // Fallback to home or login
          }
        }
      }
      // 如果删除的不是当前激活的标签页，则不需要改变路由，只更新checked状态确保当前激活的还是激活的
      else {
        // 确保当前路由的标签页依然是激活状态
        const currentRouteUrl = router.currentRoute.value.path;
        const currentActiveInList = state.tabsMenuList.find(tab => tab.url === currentRouteUrl);
        if (currentActiveInList) {
          state.tabsMenuList.forEach(item => item.checked = false);
          currentActiveInList.checked = true;
        } else {
          // 如果当前路由对应的标签页已经被删除，则激活最后一个（或dashboard）
          const lastRemainingTab = state.tabsMenuList[state.tabsMenuList.length - 1];
          if (lastRemainingTab) {
            state.tabsMenuList.forEach(item => item.checked = false);
            lastRemainingTab.checked = true;
            router.push(lastRemainingTab.url);
          }
        }
      }
    }
  },

  actions: {
    addTabs({ commit }, str) {
      commit("addTabsMenu", str);
    },
    delectTag({ commit }, val) {
      commit('delectTagMenu', val);
    }
  },
};